문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 무한 루프 (문단 편집) == [[프로그래밍]] 용어 == [[프로그램]]이 일련의 명령을 무한히 반복하는 것을 말한다. 이런 무한 루프는 프로그래밍 실수로 인해 발생할 수도 있고 의도적으로 탈출 조건을 설정한 다음 만들 수도 있다. {{{#!syntax cpp while(1);}}}[* [[C 언어]] family 기준.]같은 식으로 간단히 만들 수 있다.[* [[Java]], [[JavaScript]]에서는 true를 쓰지만 JavaScript 같은 경우엔 1을 넣어도 잘 작동한다.] 또는 for문을 사용하고 싶다면 {{{#!syntax cpp for(;;)}}}를 쓰면 된다.[* 일부 C 컴파일러에서는 경고 수준이 높을 경우 while(1) 문 사용 시 조건문이 상수라는 이유로 경고를 발생시킨다. for(;;)는 경고를 발생시키지 않는다. 물론 동작은 둘다 똑같이 무한 루프다.][* 컴파일러가 최적화가 잘 된 요즘에는 while(1)을 쓰나 for(;;)를 쓰나 동일하지만, 90년대 이전에는 while(1)이 루프가 돌 때마다 조건을 검사하여 약간 더 느렸었다. 그래서 옛날부터 해왔던 교수님들은 아직도 for(;;)를 선호하기도 한다. --[[숏코딩|그리고 더 짧다.]]--] [[UNIX]]의 [[터미널#s-2]] 프로그램에서 이 명령어를 입력하면 무한 루프가 행해진다.[* [[yes|해당 문서로.]] ] {{{#!syntax sh $ yes }}}이 경우에는 시스템에 부하 테스트(스트레스 테스트)를 행하기 위해 고의적으로 일으키는 루프다.[* 가끔씩 프로그램 설치할 때마다 {{{[y/n]}}} 형식의 질문에서 매번 {{{y}}} 입력하는 게 귀찮다고 쓰는 작자들도 있다(...).] 정지시키기 위해서는 그냥 {{{Ctrl+C}}}를 눌러 [[인터럽트]]를 발생시키면 된다. [[스크래치(교육 플랫폼)|스크래치]]와 [[엔트리(교육 플랫폼)|엔트리]]에서는 무한/계속 반복하기 블럭이 있다. [[프로그래밍]]을 막 배우기 시작한 단계에서의 무한 루프는 대부분 실수에서 나오므로 나쁜 것이라고 생각하기 쉽지만 우리가 쓰는 거의 모든 프로그램이 실행 중이라는 것은 곧 무한 루프 속에 있다는 것을 의미한다. 예를 들어, 우리가 이렇게 모니터로 [[위키]]를 보면서 [[위키질]]을 할 수 있는 것도 OS가 무한루프를 통해 화면을 뿌리는 것을 반복하면서 동시에 입력신호를 대기하는 무한 루프가 돌아가고 있는 덕분이다. 비디오 게임 역시 마찬가지로 게임을 시작하고 가만히 놔두더라도 실제 게임 속에서는 입력 → 갱신 → 그리기라는 한 번의 루프를 초당 수십번씩 도는 것(60/144 [[FPS]] 등)을 전제로 작성되고 있다. 이것을 게임 루프라고 한다. 의도적인 무한 루프가 필요한 경우, 제어를 위해 반드시 그 탈출 조건을 만들어야 한다. 반복문 내에 break;와 같은 중단점을 삽입하거나, 좀더 안정적인 방법으로 해당 루프문에 조건을 걸어놓고 해당 조건을 충족시켜 주는 방법이 있다. 특히 멀티[[스레드]] 프로그래밍을 할때도 이런 식으로 루프를 종료한다. 시스템을 정지시켜야 할 상황 등을 위해 무한 루프를 발생시키는 [[기계어]] 명령어도 있다. 가령 인텔 [[x86]] CPU의 HLT 명령어는 더 이상의 명령어 실행을 정지시키고 인터럽트나 [[리셋]] 등의 특정 조작에 의해서만 동작을 재개하는 명령어이다. 간혹 한 발 더 나아가 [[장비를 정지합니다|인터럽트나 시스템 명령에도 응답하지 않고 유의미한 동작을 하는 것도 아니거니와 내부에서는 바쁘게 돌아가는]], 무의미한 동작 상태에 빠지는 명령어가 있을 수도 있는데, 실행은 정지되고 그리 바쁘게 돌아가다 보면 불 붙겠네 해서 이런 명령에 붙는 별명이 Halt and Catch Fire (HCF).[* 정작 이 항목에는 HCF로는 [[HCF|HANGUL CHOSEONG FILLER]] 때문에 들어올 수 없다.] 보통은 [[펜티엄]]의 버그와 같이 이런 동작을 의도하지 않은 경우가 많지만, 명령 실행은 하지 않으나 의미있는 동작을 하는 CPU도 존재한다. 그 예로 모토로라 68k 프로세서에는 명령 수행을 중지하고 0번지부터 시작해서 모든 가용 메모리 워드를 매 클럭마다 읽어들이지만 그것으로 유의미한 결과를 내지는 않는 명령어가 있는데, 이는 벤더 쪽에서 버스에서의 데이터 흐름 등으로 프로세서의 기계적 결함을 진단할 수 있도록 내장한 명령어라고 한다. [[재귀함수]]는 이론상 무한루프가 가능하나, 함수 실행을 스택에 저장하기 때문에 (메모리가 유한하기에) 무한 루프가 성립하지 않고 런타임 에러가 난다. [[컴파일러]]에서 루프 한도를 직접 지정해줄 수 있다. C나 Node.js 등으로 무한 루프를 cpu 스레드 개수정도 동시에 실행하면 CPU가 100%인 것을 볼 수 있다. 프로세스 하나에서 작업을 잡고 놔주지 않기 때문. 반복문 끝에 잠시 대기로 들어가는 코드(Sleep() 등)을 사용하면 잠시 점유를 놓기 때문에 CPU 점유율이 내려간다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기